package main

import (
	"fmt"
	"sync"
	"time"
)


func main() {
	wg := &sync.WaitGroup{}
	s := []string{"a", "b", "c"}
	for _, v := range s {
		/*
			这里传递的是地址，所以如果闭包没有参数就会打印出c,c,c。
			正常：
			1. 带参数
			2. 强制等待（wg）：即按顺序执行。即使是地址传递，地址的值也会按顺序给。
		*/
		//wg.Add(1)
		go func(wg *sync.WaitGroup) {
			//defer wg.Done()
			fmt.Println(fmt.Sprintf("in add1:%v",v))
		}(wg)
		//wg.Wait()
		//这个输出就正常了
		//wg.Add(1)
		go func(wg *sync.WaitGroup, v string) {
			//defer wg.Done()
			fmt.Println(fmt.Sprintf("in add2:%v",v))
		}(wg, v)
		//wg.Wait()
	}
	time.Sleep(time.Second * 1)
}
